function AttributeInfoCache()
{

this.GetAttributeDisplayName = getAttributeDisplayName;
this.GetAttributeType = getAttributeType;
this.Initialize = initialize;


var _oAttributeInfo = null;








function getAttribute(sAttributeAlias)
{
return _oAttributeInfo.selectSingleNode(formatString("/Attributes/Attribute[@Alias = '{0}']", sAttributeAlias));
}








function getAttributeDisplayName(sAttributeAlias)
{
var oAttributeNode = getAttribute(sAttributeAlias);
return (IsNull(oAttributeNode)) ? null : oAttributeNode.text;
}








function getAttributeType(sAttributeAlias)
{
var oAttributeNode = getAttribute(sAttributeAlias);
return (IsNull(oAttributeNode)) ? null : oAttributeNode.getAttribute("Type");
}







function initialize(sFetchXml, iLocaleId)
{





var oCommand = new RemoteCommand("Reports", "GetAttributeInfo");
oCommand.SetParameter("fetchXml", CrmEncodeDecode.CrmXmlEncode(sFetchXml));
oCommand.SetParameter("lcid", iLocaleId);
var oResult = oCommand.Execute();
var sDisplayNamesXml = (oResult.Success == ERROR_NONE) ? oResult.ReturnValue : null;


if (!IsNull(sDisplayNamesXml) && sDisplayNamesXml.length > 0)
{
_oAttributeInfo = loadXmlDocument(sDisplayNamesXml);
return true;
}

return false;
}
}
